#pragma once
#include"Channel.h"
#include"EventLoop.h"

struct EventLoop;
struct Dispatcher {
	
    // init // 初始化epoll poll select 的数据块fd——set poll_fd
    void* (*init)(); // Dispacherdata
    // 添加 // 添加到什么位置呢？ 红黑树根节点？应该放到什么位置嗯？ 在init的时候可以跟fd_set这样的数据构造成一个结构体，返回回来
    int (*add)(struct Channel* channel,struct EventLoop * eventLoop);
    // 移除 ,把一个节点从epoll树上删除
    int (*remove)(struct Channel* channel,struct EventLoop * eventLoop);
    // 修改把一个节点从epoll树上修改
    int (*modify)(struct Channel* channel,struct EventLoop * eventLoop);
    //事件检测 ，检测epoll树上是否有事件发生
    int (*dispatch)(struct EventLoop * eventLoop,int timeout); //单位秒

    //清除数据 关闭fd或者释放内存
    int (*clear)(struct EventLoop * eventLoop);
};